from toffee import Bundle, Signals


class WriteBundle(Bundle):
    """
    包含向FIFO 写入数据的相关端口
    """

    rst_n, we_i, re_i, data_i = Signals(4)

    def enqueue(self, data: tuple):
        self.rst_n.value, self.we_i.value, self.re_i.value, self.data_i.value = data


class ReadBundle(Bundle):
    """
    包含从FIFO 读出数据的相关端口
    """

    data_o, full_o, empty_o = Signals(3)

    def dequeue(self):
        return self.data_o.value, self.full_o.value, self.empty_o.value


class InternalBundle(Bundle):
    """
    封装 FIFO 内部状态信号
    """

    # reg [31:0] ram[16];        // 16x32位的RAM存储阵列

    # reg [3:0] wptr;           // 写指针（4位，寻址16个位置）
    # reg [3:0] rptr;           // 读指针（4位，寻址16个位置）
    # reg [4:0] counter;        // FIFO中数据个数计数器（5位，可计数0-16）

    # 有效控制信号
    rvalid, wvalid = Signals(2)
